Modbus Tcp Master操作手册


概述

Modbus 本身是一种信息交换的规范,Modbus TCP则是透过TCP/IP来实现Modbus 的一种方式,因此所有的信息都是通过TCP/IP来传输的;Modbus协议属于 C/S 架构,Modbus Tcp Master可以读写Rtu Slave的地址,实现数据交互;

使用场景

整体架构

产品组件 描述说明
主站 simodbusmaster_1.1.4_amd64.deb Modbus tcp Master RTE组件
SF4100_ModbusMaster_1.0.0.2.library Modbus tcp Master Metafacture 库文件
从站 modbusslave_1.1.3_amd64.deb Modbus tcp Slave RTE组件
sf4100_modbusslave_1.0.0.1.library Modbus tcp Slave Metafacture 库文件

安装卸载

安装要求

安装过程

工智机端安装Modbus Tcp Master RTE组件

Metafacture安装library

卸载过程

工智机端卸载Modbus Tcp Master RTE组件

卸载MetaFacture侧的Modbus Tcp master library


技术说明

快速启动

本例实验要求及原理

硬件: 软件:

本例实验要求及原理

实验要求:按照“安装卸载”部分中的“安装过程”配置完成Modbus Tcp Master环境

1、实验原理

本例实验操作步骤

读操作

测试环境

SX21工智机作为主站,助手作为从站:

从站助手配置:

Connection 选择:Modbus TCP/IP

Ip Address :本机电脑IP地址(与工智机在同一网段)

Port :502(示例使用默认端口号)

操作步骤

1、创建工程ModbusTCPMaster 工程;

2、按照如下操作完成读功能操作;

读多线圈的实验步骤如下:

POU中声明区域调用modbus tcp master读线圈功能块

bRead                          : BOOL ;
ReadCoils                    : FB_MBTcpReadCoils;
ReadCoilData            : ARRAY[0..9] OF BYTE;
c

b读取离散输入的实验步骤如下:

bRead                               : BOOL ;
ReadInputs                       : FB_MBTcpReadInputs;
ReadInputData : ARRAY[0..9] OF BYTE;
ReadInputs(sIPAddr:=ipaddr , 
nTCPPort:=502 , 
nUnitID:= 1,
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(ReadInputData) , pDestAddr:=ADR(ReadInputData) , 
bExecute:=bRead , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

c. 读取保持寄存器的实验步骤如下:

bRead                           : BOOL ;
ReadRegs                     : FB_MBTcpReadRegs;
ReadRegsData     : ARRAY[0..9] OF WORD;
ReadRegs(sIPAddr:=ipaddr , 
nTCPPort:=502 , 
nUnitID:= 1, 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(ReadRegsData) , pDestAddr:=ADR(ReadRegsData) ,
bExecute:=bRead , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

d. 读取输入寄存器的实验步骤如下:

bRead                              : BOOL ;
ReadInputRegs                : FB_MBTcpReadInputRegs;
ReadInputRegsData: ARRAY[0..9] OF WORD;
ReadInputRegs(sIPAddr:=ipaddr , 
nTCPPort:=502 , 
nUnitID:=1 , 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(ReadInputRegsData) , pDestAddr:=ADR(ReadInputRegsData) , bExecute:=bRead , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

写操作

测试环境

SX21工智机作为主站,助手作为从站。

操作步骤

1、创建工程ModbusTCP Master 工程;

2、按照如下操作完成写功能操作;

a. 写多线圈的实验步骤如下:

bWrite                           : BOOL ;
WriteCoils                     : FB_MBTcpWriteCoils;
WriteCoilsData     : ARRAY[0..9] OF BOOL:=[1,1,1,1,1];
WriteCoils(sIPAddr:=ipaddr , 
nTCPPort:=502 , 
nUnitID:=1 , 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(WriteCoilsData) , 
pSrcAddr:=ADR(WriteCoilsData) , 
bExecute:=bWrite , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

b. 写多保持寄存器的实验步骤如下:

bWrite                           : BOOL ;
WriteRegs                     : FB_MBTcpWriteRegs;
WriteRegsData     : ARRAY[0..9] OF WORD:=[16#FF,16#FE,16#FD,16#FC,16#FB,16#FA,16#F9,16#F8,16#F7,16#F6];
WriteRegs(sIPAddr:=ipaddr , 
nTCPPort:=502 , 
nUnitID:=1 , 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(WriteRegsData) , pSrcAddr:=ADR(WriteRegsData) , 
bExecute:=bWrite , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

两台工智机相互访问

测试环境

SX20工智机作为主站,SX21工智机作为从站。

Modbus Slave 端使用说明:

Q区---功能码:01 ,02 、05 位变量操作(读写)

M区---功能码:03 ,04 、06 寄存器变量操作(读写)

操作步骤

1、创建工程ModbusTCPSlave 工程;

2、配置从站工程声明变量;

PROGRAM ModbusTCPSlave
VAR
TCPslave                   : MetaCore_ModbusSlave.FB_ModbusTCPSlave;//Modbus TCP从站功能块
Coil  : ARRAY[0..9] OF BOOL:=[1,0,1,0,1,0,1,0,1,0];//初始化线圈数据
DiscreteInput  : ARRAY[0..9] OF BOOL:=[0,1,0,1,0,1,0,1,0,1];//初始化离散输入数据
InputRegister  : ARRAY[0..9] OF WORD:=[11,22,33,44,55,66,77,88,99,16#AA];
//初始化输入型寄存器数据
HoldingRegister  : ARRAY[0..9] OF WORD:=[16#AA,99,88,77,66,55,44,33,22,11];
//初始化保持型寄存器数据
END_VAR
TCPslave(
        bEnable:=TRUE ,                                       //Modbus TCP从站功能块使能
        ePort:= ,                                                     //Modbus RTU参数,Modbus TCP不填
        sIpAddr:='192.168.105.11' ,                       //Modbus TCP从站IP地址
        uiIpPort:=503 ,                                  //Modbus TCP从站端口,本例使用503端口
        udiTimeOut:= ,                                            //超时时间
        pbyCoil:=ADR(Coil) ,                                   //线圈指针
        pbyDiscreteInput:=ADR(DiscreteInput) ,     //离散输入指针
        pbyInputRegister:=ADR(InputRegister) ,    //输入型寄存器指针
        pbyHoldingRegister:=ADR(HoldingRegister) ,       //保持型寄存器指针
        udiRwBitSize:=SIZEOF(Coil) ,                              //线圈的个数
        udiInBitSize:=SIZEOF(DiscreteInput) ,                 //离散输入的个数
        udiInWordSize:=SIZEOF(InputRegister) ,             //输入型寄存器的个数
        udiRwWordSize:=SIZEOF(HoldingRegister) ,      //保持型寄存器的个数
        psMbTest:= ,                                                         //测试用,不可填
        bBusy=> , bActive=> , bConnect=> , bError=> , eError=> , ulRecvCounter=> , ulSendCounter=> , sLocalIp=> , sClientIP=> );
        

3、创建工程ModbusTCPMaster 工程;

4、按照如下操作完成写功能操作;

a. 写多线圈的实验步骤如下:

bWrite                           : BOOL ;
WriteCoils                     : FB_MBTcpWriteCoils;
WriteCoilsData     : ARRAY[0..9] OF BOOL:=[1,1,1,1,1];
WriteCoils(sIPAddr:=ipaddr , 
nTCPPort:=503 , 
nUnitID:=1 , 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(WriteCoilsData) , 
pSrcAddr:=ADR(WriteCoilsData) , 
bExecute:=bWrite , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

b. 写多保持寄存器的实验步骤如下:

bWrite                           : BOOL ;
WriteRegs                     : FB_MBTcpWriteRegs;
WriteRegsData     : ARRAY[0..9] OF WORD:=[16#FF,16#FE,16#FD,16#FC,16#FB,16#FA,16#F9,16#F8,16#F7,16#F6];
WriteRegs(sIPAddr:=ipaddr , 
nTCPPort:=503 , 
nUnitID:=1 , 
nQuantity:=10 , 
nMBAddr:=0 , 
cbLength:=SIZEOF(WriteRegsData) , pSrcAddr:=ADR(WriteRegsData) , 
bExecute:=bWrite , 
tTimeout:= , bBUSY=> , bError=> , nErrId=> );

实验注意点

1、实验中用到的从站的IP、端口请改成实际使用的从站ip、端口;

2、实验中使用的从站配置案例如下:


功能介绍

主站配置读取从站多线圈

功能块FB_MBTcpReadCoils介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站的IP
nTCPPort UINT 从站的端口
nUnitID BYTE 从站ID
nQuantity WORD 从线圈起始位置读取的长度,一次最多读取125位
nMBAddr WORD 线圈起始位置
cbLength UDINT 存储读取的字节大小
pDestAddr POINTER TO BYTE 要读的存放数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout Time 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置读取从站输入寄存器

功能块FB_MBTcpReadInputRegs介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nQuantity UINT 读取多少位输入寄存器,一次最多读取125位
nMBAddr UINT 读取的输入寄存器起始位置
cbLength UINT 存储读取的字节大小
pDestAddr POINTER TO WORD 要读的存放数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置读取从站离散输入

功能块FB_MBTcpReadInputs介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nQuantity UINT 读取多少位离散输入
nMBAddr UINT 读取的离散输入起始位置
cbLength UINT 存储读取的字节大小
pDestAddr POINTER TO BYTE 要读的存放数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置读取从站保持寄存器

功能块FB_MBTcpReadRegs介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nQuantity UINT 读取多少位保持寄存器,一次最多读取125位
nMBAddr UINT 读取的保持寄存器起始位置
cbLength UINT 存储读取的字节大小
pDestAddr POINTER TO word 要读的存放数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置写从站多线圈

功能块FB_MBTcpWriteCoils介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nQuantity UINT 写多少位线圈
nMBAddr UINT 要写入的线圈起始位置
cbLength UINT 存储写入的字节大小
pSrcAddr POINTER TO BYTE 要写入的数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置写从站多保持寄存器

功能块FB_MBTcpWriteRegs介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nQuantity UINT 写多少位线圈,一次最多写123位
nMBAddr UINT 要写入的保持寄存器起始位置
cbLength UINT 存储写入的字节大小
pSrcAddr POINTER TO WORD 要写入的数据的存放地址
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置写从站单线圈

功能块FB_MBTcpWriteSingleCoil介绍

参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nMBAddr UINT 要写入的单线圈的位置
nValue BOOL 要写入的值
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

主站配置写从站单保持寄存器

功能块FB_MBTcpWriteSingleReg介绍

8.2. 参数介绍

参数名称 参数类型 描述
sIPAddr string 从站ip
nTCPPort UINT 从站端口
nUnitID UINT 从站id
nMBAddr UINT 要写入的单保持寄存器的位置
nValue UINT 要写入的值
bExecute BOOL 上升沿触发执行
tTimeout TIME 超时
参数名称 参数类型 描述
bBUSY BOOL 功能块激活时设置,直到确认接收
bError BOOL 如果命令在传输过程中出现错误,则设置true直到bBusy输出被重置
nErrId UDINT 当bError输出被设置,提供错误号

9 . 主站配置连接10从站


附录

Linux 指令安装/卸载指南

安装要求

安装过程

工智机端安装Modbus Tcp Master RTE组件

cd $HOME sudo dpkg -i modbusmaster_1.1.4_amd64.deb
 \[ComponentManager] Component.0=retainDeamon Component.1=CmpCanBusUtils Component.2=CmpSinsegyeLibs Component.3=SinsegyeCmp Component.4=modbusmaster
sudo systemctl restart sinsegyerte.service

更新安装

工智机端升级Modbus Tcp Master RTE组件

cd $HOME sudo dpkg -i modbusmaster_1.1.4_amd64.deb
sudo systemctl restart sinsegyerte.service

卸载过程

工智机端卸载Modbus Tcp Master RTE组件

sudo dpkg -r simodbusmaster
sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg
sudo systemctl restart sinsegyerte.service

错误处理

  1. 需要先确定网络通讯正常,确定主站要请求的从站地址都存在;

  2. 确保主/从站的deb包与Library文件包一致;